package com.smart.base.taskTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.Channel;
import java.nio.channels.FileChannel;

/**
 * 使用Buffer读写数据一般遵循以下四个步骤：
1.写入数据到Buffer
2.调用flip()方法
3.从Buffer中读取数据
4.调用clear()方法或者compact()方法
capacity 当前位置
position 总容量
limit 当前容量 
 * @author gebao
 *
 */
public class BufferTest {
	public static void main(String[] args) {
		try {
			//文件
			FileInputStream input = new FileInputStream(new File("c://test.txt"));
			//创建通道
			FileChannel channel = input.getChannel();
			//创建缓冲器，相当一个一个容器
			ByteBuffer buffer =ByteBuffer.allocate(40);//舍得容器容量
			//读取数据，写入容器数据， 返回值为-1表示没有内容
			int bbr = channel.read(buffer);
			StringBuffer sb = new StringBuffer();
			while(bbr != -1){
				//写入完毕，后重置位置 capacity = ,position = 总容量，limit =实际容量
				buffer.flip();
				//遍历容器取出数据
				while(buffer.hasRemaining()){
					sb.append((char)buffer.get());
				}
				//去除完毕重置位置，以为再写去
				buffer.clear();
				//重新 读取数据，写入容器数据， 返回值为-1表示没有内容
				bbr = channel.read(buffer);
			}
			System.out.println(sb.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
